package org.deng.vertx.common.util;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author 邓力宾
 * @date 2021/7/19 15:23
 * @desc
 */
public class FreemarkerUtils {
    private  static Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);

    /**
     * 使用模板和java bean 生成html
     * @param ftlFilePath 模板领
     * @param htmlFileOutPath html输出路径
     * @param javaBean 数据对象
     * @throws IOException
     * @throws TemplateException
     */
    public  static  void createHtml(String ftlFilePath,String htmlFileOutPath, Object javaBean) throws IOException, TemplateException {

        /*Map<String, Object> map = new HashMap<>();
        map.put("hello", "Hello World!");
        map.put("inputValue", "这是输入值");
        map.put("imageUrl", "http://static.firefoxchina.cn/img/201809/8_5bac2e05522d90.jpg");*/
        /**
         * 不需要重复创建 Configuration 实例； 它的代价很高，尤其是会丢失缓存。Configuration 实例就是应用级别的单例。
         */
        cfg.setDirectoryForTemplateLoading(new File(ftlFilePath).getParentFile());
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Template temp = cfg.getTemplate(new File(ftlFilePath).getName());
        File file = new File(htmlFileOutPath);
        if(file.exists()){
            file.delete();
        }
        FileWriter out = new FileWriter(file);
        temp.process(javaBean, out);
        out.close();
    }
}
